package com.baofu.paycore.service.facade.model;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;

/**
 * 支付基础类
 *
 * User: LZQ  Date: 2014/11/20 ProjectName: paycore Version: 5.0.0
 * User: kwl  Date: 2016/05/16 ProjectName: paycore Version: 5.0.0
 */
@Getter
@Setter
@ToString
public class PayBaseDTO implements Serializable {

    /**
     * 序列化ID
     */
    private static final long serialVersionUID = -526015575973507339L;

    /**
     * 请求系统
     */
    @NotBlank(message = "请求系统不能为空")
    private String requestSystem;

    /**
     * 请求服务编码
     */
    @NotBlank(message = "请求服务编码不能为空")
    private String serviceCode;

    /**
     * 关联号
     */
    @NotBlank(message = "关联号不能为空")
    @Length(max = 32,message = "关联号不能超过32位")
    private String relationNo;

    /**
     * 请求订单号
     */
    @NotBlank(message = "请求订单号不能为空")
    @Length(max = 32,message = "请求订单号不能超过32位")
    private String requestOrderNo;

    /**
     * 请求业务编号
     */
    @NotBlank(message = "请求业务编号不能为空")
    @Length(max = 32,message = "请求业务编号不能超过32位")
    private String requestBizNo;

    /**
     * 支付终端类型
     * 交易渠道 WEB WAP APP
     */
    @NotBlank(message = "请求渠道不能为空")
    private String requestChannel;

    /**
     * 请求日期
     */
    @NotNull(message = "订单日期不能为空")
    private Date requestDate;

    /**
     * 货币
     */
    @NotBlank(message = "货币类型不能为空")
    @Length(max=4,message = "货币类型超过最大长度")
    private String ccy;

    /**
     * 交易总金额
     */
    @Min(value = 1,message = "交易金额必须大于0")
    @NotNull(message = "交易金额不能为空")
    private Long amt;

    /**
     * 原币币种
     */
    private String sourceCcy;

    /**
     * 原币金额
     */
    private Long sourceAmt;

    /**
     * 汇率
     */
    private double rate;

    /**
     * 产品大类
     */
    @NotBlank(message = "产品大类不能为空")
    @Length(max=32,message = "产品大类超过最大长度")
    private String bizType;

    /**
     * 产品细类
     */
    @NotBlank(message = "产品细类不能为空")
    @Length(max=32,message = "产品细类超过最大长度")
    private String subBizType;

    /**
     * 产品渠道
     * <p>
     * 是指宝付系统后端对接的具体渠道,如，宝付后端对接的银行渠道等。
     * 目前在商户线下打款业务中用到，用来表示商户具体打款的渠道。
     * </p>
     */
    private String productChannel;

    /**
     * 商户号
     */
    @Length(max = 32, message = "商户号长度不能超过(32)")
    private String merchantNo;

    /**
     * 备注
     */
    @Length(max = 128,message = "备注信息长度不能超过128位")
    private String description;

    /**
     * 操作人
     */
    @Length(max = 32,message = "操作人长度不能超过32位")
    @NotNull(message = "操作人不能为空或空格")
    private String operator;

    /**
     * 扩展信息
     */
    private Map<String,String> paymentExt;

}
